home *** CD-ROM | disk | FTP | other *** search
/ Kit PC World De Ampliacion De Windows 95 / Kit PC World de ampliacion de Windows 95.iso / clarion / 3rdparty / tools / toolcrft / ptinline.tpw < prev    next >
Encoding:
Text File  |  1995-10-23  |  38.8 KB  |  798 lines

  1. #!---------------------------------------------------------!
  2. #!                                                         !
  3. #! Copyright 1994, 1995 ToolCraft Development Corporation  !
  4. #!                                                         !
  5. #!                  ALL RIGHTS RESERVED                    !
  6. #!                                                         !
  7. #!---------------------------------------------------------!
  8. #!
  9. #!
  10. #!-------------------------------------------------------------------------
  11. #GROUP(%SetupInLineFieldOrders)
  12. #IF(%UsingInlineEntry AND %UpdateProcedure)
  13.   #DECLARE(%FoundInLineOnOff)
  14.   #CLEAR(%FoundInLineOnOff)
  15.   #FOR(%Control),WHERE(%ControlTemplate = 'InLineOnOffButton(ToolCraft)')
  16.     #SET(%FoundInLineOnOff,%True)
  17.   #ENDFOR
  18.   #IF(NOT %FoundInLineOnOff)
  19.     #ERROR('ERROR#011:' & %Procedure & ' - An In-Line On/Off Button is Required to use an Update Procedure with In-Line Editing.')
  20.   #END
  21. #ENDIF
  22. #DECLARE(%InLineFieldOrders),MULTI
  23. #DECLARE(%InLineFieldEquates),MULTI
  24. #DECLARE(%InLineFieldEquateValue,%InLineFieldEquates)
  25. #DECLARE(%CommaSeperator)
  26. #DECLARE(%EquateConstruct)
  27. #FOR(%Control),WHERE(%ControlTemplate = 'BrowseBox(ToolCraft)')
  28.   #IF(%ActiveTemplateInstance=%ControlInstance)
  29.     #SET(%ToolCraftInLineFieldNumberOffset,100)
  30.   #ENDIF
  31.   #BREAK
  32. #ENDFOR
  33. #IF(%UsingMultiDisplay)
  34.   #FOR(%AltFormats)
  35.     #IF(%AltListBox)
  36.       #INSERT(%SetupInLineFieldOrderEquate,%AltListBox)
  37.     #ELSE
  38.       #INSERT(%SetupInLineFieldOrderEquate,%ListControl)
  39.     #ENDIF
  40.   #ENDFOR
  41. #ELSE
  42.   #INSERT(%SetupInLineFieldOrderEquate,%ListControl)
  43. #ENDIF
  44. #CLEAR(%ValueConstruct)
  45. #LOOP
  46.   #SET(%ValueConstruct,%ValueConstruct + 1)
  47.   #IF(%ValueConstruct > ITEMS(%InLineInstance))
  48.     #BREAK
  49.   #ENDIF
  50.   #FOR(%QueueField),WHERE(%QueueFieldEditField = %ValueConstruct)
  51.     #ADD(%InLineFieldEquates,%QueueFieldAssignment)
  52.     #SET(%ToolCraftInLineFieldNumberOffset,%ToolCraftInLineFieldNumberOffset+1)
  53.     #SET(%InLineFieldEquateValue,%ToolCraftInLineFieldNumberOffset)
  54.   #ENDFOR
  55. #ENDLOOP
  56. #!-------------------------------------------------------------------------
  57. #GROUP(%SetupInLineFieldOrderEquate,%FormatControl)
  58. #CLEAR(%ValueConstruct)
  59. #CLEAR(%CommaSeperator)
  60. #CLEAR(%InLineFieldNumber)
  61. #FOR(%Control),WHERE(%Control = %FormatControl)
  62.   #FOR(%ControlField)
  63.     #FOR(%QueueField),WHERE(%QueueFieldAssignment = %ControlField)
  64.       #SET(%ValueConstruct,%ValueConstruct & %CommaSeperator & %QueueFieldEditField)
  65.       #SET(%CommaSeperator,',')
  66.     #ENDFOR
  67.   #ENDFOR
  68. #ENDFOR
  69. #ADD(%InLineFieldOrders,%ValueConstruct)
  70. #!-------------------------------------------------------------------------
  71. #GROUP(%CallInLineEntryProcedure,%InLineEntryUpdateAction)
  72. #FOR(%Control),WHERE(%Control = %ChangeOrderControl)
  73. #EMBED(%DisableTabBeforeInLineUpdate,''),%Control,HIDE
  74. #ENDFOR
  75. #DECLARE(%AbortButtonParm)
  76. #DECLARE(%SaveButtonParm)
  77. #CLEAR(%AbortButtonParm)
  78. #CLEAR(%SaveButtonParm)
  79. #IF(%InLineUseAbortButton)
  80.   #SET(%AbortButtonParm,%InLineAbortButton)
  81. #ENDIF
  82. #IF(%InLineUseSaveButton)
  83.   #SET(%SaveButtonParm,%InLineSaveButton)
  84. #ENDIF
  85. #SET(%ValueConstruct,%Procedure & ':Update:' & %BrwLbl)
  86. #IF(%UsingMultiDisplay)
  87.   #IF(%AbortButtonParm OR %SaveButtonParm)
  88. %ValueConstruct(%ListControl,%InLineEntryUpdateAction,%SrtPfx:SortOrder,%AbortButtonParm,%SaveButtonParm)  #<!  Call In-Line Update Procedure
  89.   #ELSE
  90. %ValueConstruct(%ListControl,%InLineEntryUpdateAction,%SrtPfx:SortOrder)  #<!  Call In-Line Update Procedure
  91.   #ENDIF
  92. #ELSE
  93.   #IF(%AbortButtonParm OR %SaveButtonParm)
  94. %ValueConstruct(%ListControl,%InLineEntryUpdateAction,%AbortButtonParm,%SaveButtonParm)  #<!  Call In-Line Update Procedure
  95.   #ELSE
  96. %ValueConstruct(%ListControl,%InLineEntryUpdateAction)  #<!  Call In-Line Update Procedure
  97.   #ENDIF
  98. #ENDIF
  99. #FOR(%Control),WHERE(%Control = %ChangeOrderControl)
  100. #EMBED(%EnableTabAfterInLineUpdate,''),%Control,HIDE
  101. #ENDFOR
  102. #!-------------------------------------------------------------------------
  103. #GROUP(%InLineEntryMAPDeclaration)
  104.   #FOR(%Control),WHERE(%ControlInstance = %ActiveTemplateInstance)
  105.                      MAP
  106.     #IF(%UsingMultiDisplay)
  107.                        %Procedure:Update:%ControlFrom(LONG,LONG,<LONG>,<BYTE>,<BYTE>)
  108.     #ELSE
  109.                        %Procedure:Update:%ControlFrom(LONG,LONG,<BYTE>,<BYTE>)
  110.     #ENDIF
  111.                      END
  112.   #ENDFOR
  113. #!-------------------------------------------------------------------------
  114. #GROUP(%GenerateInlineInsertCode)
  115. #INSERT(%CallInLineEntryProcedure,'TCACTION:InsertRecord')
  116. IF GlobalResponse = RequestCompleted                          #<!  If Update Completed
  117.   TC_PROP:BRW(%ListControl,TCPROP:Action,TCACTION:Refresh)    #<!    Tell Browse to Redisplay
  118.   TC_PROP:BRW(%ListControl,TCPROP:SetToPosition,2)            #<!    Record at the current positon
  119. #IF(%UsingBrowseTotals)
  120.   DO BrowseAddTotal:%BrwLbl                                   #<!    Add Current Reccord Values to Total
  121. #ENDIF
  122. ELSE                                                          #<!  Otherwise
  123.   DELETE(%ListQueue)                                          #<!    Delete Cancelled Queue Record
  124. #CASE(%InLineInsertMode)
  125. #OF('Top of List')
  126.   POST(EVENT:ScrollTop,%ListControl)                          #<!    Redisplay First Page of Records
  127. #OF('Bottom of List')
  128.   POST(EVENT:ScrollBottom,%ListControl)                       #<!    Redisplay Last Page of Records
  129. #OF('Current Position')
  130.   TC_PROP:BRW(%ListControl,TCPROP:Action,TCACTION:Refresh)    #<!    Tell Browse to Redisplay
  131.   TC_PROP:BRW(%ListControl,TCPROP:SetToPosition,1)            #<!    Record at the current positon
  132. #ENDCASE
  133. END                                                           #<!  End If
  134. #!-------------------------------------------------------------------------
  135. #GROUP(%GenerateInLineChangeCode)
  136. #IF(%UsingBrowseTotals)
  137. DO BrowseSubtractTotal:%BrwLbl                                #<!  Subtract Current Record Values from Total
  138. #ENDIF
  139. #INSERT(%CallInLineEntryProcedure,'TCACTION:ChangeRecord')
  140. TC_PROP:BRW(%ListControl,TCPROP:Action,TCACTION:Refresh)      #<!  Tell Browse to Redisplay
  141. TC_PROP:BRW(%ListControl,TCPROP:SetToPosition,2)              #<!  Record at the current positon
  142. #IF(%UsingBrowseTotals)
  143. DO BrowseAddTotal:%BrwLbl                                     #<!  Add Current Reccord Values to Total
  144. #ENDIF
  145. #!-------------------------------------------------------------------------
  146. #GROUP(%GenerateInLineDeleteCode)
  147. #INSERT(%CallInLineEntryProcedure,'TCACTION:DeleteRecord')
  148. TC_PROP:BRW(%ListControl,TCPROP:Action,TCACTION:Refresh)      #<!  Tell Browse to Redisplay
  149. TC_PROP:BRW(%ListControl,TCPROP:SetToItem,True)               #<!  Record at the current positon
  150. #IF(%UsingBrowseTotals)
  151. IF GlobalResponse = RequestCompleted                          #<!  If Record was Deleted
  152.   DO BrowseSubtractTotal:%BrwLbl                              #<!    Subtract Current Record Values from Total
  153. END                                                           #<!  End If
  154. #ENDIF
  155. #!-------------------------------------------------------------------------
  156. #GROUP(%InLineEntryProcedure)
  157. #FIX(%File,%Primary)
  158. #COMMENT(100)
  159. !==================================================================================================!
  160. !                                                                                                  !
  161. ! %Procedure:Update:%BrwLbl Procedure                                                            #<!
  162. ! ------------------------------------                                                             !
  163. ! FILE NAME   : %File                                                                            #<!
  164. ! LIST CONTROL: %ListControl                                                                     #<!
  165. ! FROM QUEUE  : %ListQueue                                                                       #<!
  166. !                                                                                                  !
  167. !==================================================================================================!
  168. #COMMENT(%CmtPos)
  169. #SET(%ValueConstruct,%Procedure & ':Update:' &%BrwLbl)
  170. #IF(%UsingMultiDisplay)
  171. %[20]ValueConstruct PROCEDURE(ListControl,UpdateAction,SortOrder,AbortButton,SaveButton)
  172. #ELSE
  173. %[20]ValueConstruct PROCEDURE(ListControl,UpdateAction,AbortButton,SaveButton)
  174. #ENDIF
  175.  
  176. #DECLARE(%AbortButtonOrigText)
  177. #DECLARE(%AbortButtonStatus)
  178. #DECLARE(%SaveButtonOrigText)
  179. #DECLARE(%SaveButtonStatus)
  180. #CLEAR(%AbortButtonOrigText)
  181. #CLEAR(%AbortButtonStatus)
  182. #CLEAR(%SaveButtonOrigText)
  183. #CLEAR(%SaveButtonStatus)
  184. #IF(%InLineUseAbortButton)
  185.   #FOR(%Control),WHERE(EXTRACT(%ControlStatement,'USE') = 'USE(' & %InLineAbortButton & ')')
  186.     #IF(%InLineAbortButtonText)
  187.       #SET(%AbortButtonOrigText,EXTRACT(%ControlStatement,'BUTTON'))
  188.       #SET(%AbortButtonOrigText,SUB(%AbortButtonOrigText,8,LEN(%AbortButtonOrigText)-8))
  189.     #ENDIF
  190.     #IF(INSTRING('HIDE',%ControlStatement,1,1) AND INSTRING('DISABLE',%ControlStatement,1,1))
  191.       #SET(%AbortButtonStatus,'BOTH')
  192.     #ELSIF(INSTRING('HIDE',%ControlStatement,1,1))
  193.       #SET(%AbortButtonStatus,'HIDE')
  194.     #ELSIF(INSTRING('DISABLE',%ControlStatement,1,1))
  195.       #SET(%AbortButtonStatus,'DISABLE')
  196.     #ENDIF
  197.   #ENDFOR
  198. #ENDIF
  199. #IF(%InLineUseSaveButton)
  200.   #FOR(%Control),WHERE(EXTRACT(%ControlStatement,'USE') = 'USE(' & %InLineSaveButton & ')')
  201.     #IF(%InLineSaveButtonText)
  202.       #SET(%SaveButtonOrigText,EXTRACT(%ControlStatement,'BUTTON'))
  203.       #SET(%SaveButtonOrigText,SUB(%SaveButtonOrigText,8,LEN(%SaveButtonOrigText)-8))
  204.     #ENDIF
  205.     #IF(INSTRING('HIDE',%ControlStatement,1,1) AND INSTRING('DISABLE',%ControlStatement,1,1))
  206.       #SET(%SaveButtonStatus,'BOTH')
  207.     #ELSIF(INSTRING('HIDE',%ControlStatement,1,1))
  208.       #SET(%SaveButtonStatus,'HIDE')
  209.     #ELSIF(INSTRING('DISABLE',%ControlStatement,1,1))
  210.       #SET(%SaveButtonStatus,'DISABLE')
  211.     #ENDIF
  212.   #ENDFOR
  213. #ENDIF
  214. #DECLARE(%NextEditField)
  215. #DECLARE(%FieldOrdNum)
  216. #DECLARE(%TotalInLineFields)
  217. #DECLARE(%TotalFieldsInArray)
  218. #SUSPEND
  219. #FOR(%InLineFieldOrders)
  220.   #IF(%UsingMultiDisplay)
  221.     #SET(%FieldOrdNum,INSTANCE(%InLineFieldOrders))
  222.   #ELSE
  223.     #CLEAR(%FieldOrdNum)
  224.   #ENDIF
  225.   #SET(%ValueConstruct,'FieldOrder' & %FieldOrdNum)
  226. %[20]ValueConstruct EQUATE('%InLineFieldOrders')           #<!Field Order for Sort Order %FieldOrdNum
  227. #END
  228. #?
  229. #RESUME
  230. #FOR(%InLineFieldEquates)
  231.   #SET(%ValueConstruct,'?' & %InLineFieldEquates)
  232. %[20]ValueConstruct EQUATE(%InLineFieldEquateValue)        #<!Set Field Number for %InLineFieldEquates
  233. #ENDFOR
  234. #SUSPEND
  235. #?
  236. #?InLineFieldSetup     GROUP
  237. #CLEAR(%TotalFieldsInArray)
  238. #CLEAR(%TotalInLineFields)
  239. #CLEAR(%NextEditField)
  240. #LOOP
  241.   #SET(%NextEditField,%NextEditField + 1)
  242.   #IF(%NextEditField > ITEMS(%InLineInstance))
  243.     #BREAK
  244.   #ENDIF
  245.   #FOR(%QueueField),WHERE(%QueueFieldEditField = %NextEditField)
  246.     #FOR(%InLineInstance),WHERE(%InLineField = %QueueFieldAssignment)
  247.       #SET(%TotalInLineFields,%TotalInLineFields+1)
  248.       #SET(%TotalFieldsInArray,%TotalFieldsInArray+1)
  249.       #CASE(%InLineFieldType)
  250.       #OF('Entry')
  251.         #SET(%ValueConstruct,'LONG(CREATE:Entry)')
  252.       #OF('Spin Box')
  253.         #SET(%ValueConstruct,'LONG(CREATE:Spin)')
  254.       #OF('Drop List')
  255.         #SET(%ValueConstruct,'LONG(CREATE:DropList)')
  256.       #OF('Drop Combo')
  257.         #SET(%ValueConstruct,'LONG(CREATE:DropCombo)')
  258.       #ELSE
  259.         #SET(%ValueConstruct,'LONG(CREATE:Entry)')
  260.       #ENDCASE
  261.                        %ValueConstruct          #<!Control Type for ?%InLineField
  262.     #ENDFOR
  263.   #ENDFOR
  264. #ENDLOOP
  265.                      #?END
  266. #?InLineFields         LONG,DIM(%TotalFieldsInArray),OVER(InLineFieldSetup)
  267. #?
  268. #RESUME
  269. #IF(NOT %TotalInLineFields)
  270.   #ERROR('ERROR#008:' & %Procedure & '-No In-Line Fields Defined')
  271. #ENDIF
  272. #!
  273. #DECLARE(%MemoCount)
  274. #CLEAR(%MemoCount)
  275. LocalResponse        LONG,AUTO
  276. #SET(%ValueConstruct,'SAVE:' & %FilePrefix & ':RECORD')
  277. %[20]ValueConstruct STRING(SIZE(%FilePrefix:RECORD))
  278.   #FOR(%Field),WHERE(%FieldType = 'MEMO')
  279.     #SET(%MemoCount,%MemoCount+1)
  280.     #SET(%ValueConstruct,'SAVE:' & %Field)
  281. %[20]ValueConstruct LIKE(%Field)
  282.   #ENDFOR
  283.  
  284. #!
  285. #DECLARE(%AutoIncField)
  286. #DECLARE(%AutoIncKey)
  287. #CLEAR(%AutoIncField)
  288. #CLEAR(%AutoIncKey)
  289. #IF(%InLineInsertAllowed)
  290.   #FIX(%File,%Primary)
  291.   #FOR(%Key),WHERE(%KeyAuto)
  292.     #FIX(%Field,%KeyAuto)
  293. SAVE:%[10]Field      LIKE(%Field)
  294. WRK:AutoAttempts     LONG,AUTO
  295.     #SET(%AutoIncField,%Field)
  296.     #SET(%AutoIncKey,%Key)
  297.     #BREAK
  298.   #ENDFOR
  299. #ENDIF
  300. #FOR(%QueueField)
  301.   #FOR(%InLineInstance),WHERE(UPPER(%InLineField)=UPPER(%QueueFieldAssignment))
  302.     #FOR(%Field),WHERE(UPPER(%Field) = UPPER(%InLineField) AND %FieldType = 'GROUP' )
  303.       #SET(%ValueConstruct,'GRP:' & %InLineField)
  304. %[20]ValueConstruct STRING(SIZE(%Field)),OVER(%Field)
  305.     #ENDFOR
  306.   #ENDFOR
  307. #ENDFOR
  308.  
  309. #EMBED(%InLineUpdateLocalDataDeclarations,'In-Line Update Local Data Declarations'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),WHERE(%ActiveTemplate = 'BrowseBox(ToolCraft)')
  310.  
  311.  
  312. !--------------------------------------------------------------------------------------------------!
  313. ! Code Section                                                                                     !
  314. !--------------------------------------------------------------------------------------------------!
  315.   CODE
  316.  
  317.   LocalResponse = RequestCancelled                         #<!Default to Request Cancelled
  318. #SUSPEND
  319.   #EMBED(%InLineUpdateProcedureSetup,'In-Line Update Procedure Setup'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),WHERE(%ActiveTemplate = 'BrowseBox(ToolCraft)')
  320. #?
  321. #RESUME
  322.   CASE UpdateAction                                        #<!Process Setup for Update Actions
  323. #IF(%InLineInsertAllowed)
  324.   OF TCACTION:InsertRecord                                 #<!On Insert New Record
  325.     #EMBED(%OnInLineInsertBeforePriming,'In-Line Update On Insert Before Record Is Primed'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),WHERE(%ActiveTemplate = 'BrowseBox(ToolCraft)')
  326.   #IF(%AutoIncField)
  327.     DO InsertRecord                                        #<!  Insert New Record
  328.   #ENDIF
  329.     SAVE:%FilePrefix:RECORD = %FilePrefix:RECORD           #<!  Save the Current Record
  330.   #FOR(%Field),WHERE(%FieldType = 'MEMO')
  331.     SAVE:%Field = %Field                                   #<!  Save the Memo Field
  332.   #ENDFOR
  333.   #FOR(%InLineInstance)
  334.     #IF(%InLineInitialValue)
  335.     %InLineField = %InLineInitialValue                     #<!  Prime Field
  336.     #ENDIF
  337.   #ENDFOR
  338.     #EMBED(%OnInLineInsertAfterPriming,'In-Line Update On Insert After Record Is Primed'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),WHERE(%ActiveTemplate = 'BrowseBox(ToolCraft)')
  339. #ENDIF
  340. #IF(%InLineChangeAllowed)
  341.   #IF(%InLineInsertAllowed)
  342.                                                            #<!
  343.   #ENDIF
  344.   OF TCACTION:ChangeRecord                                 #<!On Change Record
  345.     SAVE:%FilePrefix:RECORD = %FilePrefix:RECORD           #<!  Save the Current Record
  346.   #FOR(%Field),WHERE(%FieldType = 'MEMO')
  347.     SAVE:%Field = %Field                                   #<!  Save the Memo Field
  348.   #ENDFOR
  349. #ENDIF
  350. #IF(%InLineDeleteAllowed)
  351.   #IF(%InLineInsertAllowed OR %InLineChangeAllowed)
  352.                                                            #<!
  353.   #ENDIF
  354.   OF TCACTION:DeleteRecord                                 #<!On Delete Record
  355.     DO DeleteRecord                                        #<!  Delete the Record
  356.     GlobalResponse = LocalResponse                         #<!  Set Global Response
  357.     RETURN                                                 #<!  Exit Update Procedure
  358. #ENDIF
  359.   END                                                      #<!End Case
  360.                                                            #<!
  361.   ListControl{PROP:NoBar} = 1                              #<!Turn Off Point Bar
  362. #IF(%InLineUseAbortButton)
  363.   #CASE(%AbortButtonStatus)
  364.   #OF('HIDE')
  365.   UNHIDE(AbortButton)                                      #<!Unhide Cancel Button
  366.   #OF('DISABLE')
  367.   ENABLE(AbortButton)                                      #<!Enable Cancel Button
  368.   #OF('BOTH')
  369.   ENABLE(AbortButton)                                      #<!Enable Cancel Button
  370.   UNHIDE(AbortButton)                                      #<!Unhide Cancel Button
  371.   #ENDCASE
  372.   #IF(%InLineAbortButtonText)
  373.     #IF(SUB(LEFT(%InLineAbortButtonText),1,1)='!')
  374.   AbortButton{PROP:Text} = %InLineAbortButtonText          #<!Set New Text for Cancel Button
  375.     #ELSE
  376.   AbortButton{PROP:Text} = '%InLineAbortButtonText'        #<!Set New Text for Save Button
  377.     #ENDIF
  378.   #ENDIF
  379. #ENDIF
  380. #IF(%InLineUseSaveButton)
  381.   #CASE(%SaveButtonStatus)
  382.   #OF('HIDE')
  383.     UNHIDE(SaveButton)                                     #<!Unhide Cancel Button
  384.   #OF('DISABLE')
  385.     ENABLE(SaveButton)                                     #<!Enable Cancel Button
  386.   #OF('BOTH')
  387.     ENABLE(SaveButton)                                     #<!Enable Cancel Button
  388.     UNHIDE(SaveButton)                                     #<!Unhide Cancel Button
  389.   #ENDCASE
  390.   #IF(%InLineSaveButtonText)
  391.     #IF(SUB(LEFT(%InLineSaveButtonText),1,1)='!')
  392.   SaveButton{PROP:Text} = %InLineSaveButtonText            #<!Set New Text for Save Button
  393.     #ELSE
  394.   SaveButton{PROP:Text} = '%InLineSaveButtonText'          #<!Set New Text for Save Button
  395.     #ENDIF
  396.   #ENDIF
  397. #ENDIF
  398.                                                            #<!
  399.   LOOP                                                     #<!Process InLine Actions
  400.     #IF(%InLineUseColumnEdit)
  401.     IF UpdateAction = TCACTION:ChangeRecord                #<!If Editing an Existing Record
  402.       TC:INL:UpdateMode = 1                                #<!  Use Column Edit Option
  403.     END                                                    #<!End If
  404.     #ENDIF
  405.     #FOR(%InLineFieldEquates)
  406.     TC:INL:FirstField = ?%InLineFieldEquates               #<!Set First Field Number
  407.        #BREAK
  408.     #ENDFOR
  409.     #IF(%UsingMultiDisplay)
  410.     EXECUTE SortOrder                                      #<!Edit by Sort Order
  411.       #FOR(%AltFormats)
  412.         #SELECT(%InLineFieldOrders,INSTANCE(%AltFormats))
  413.         #SET(%FieldOrdNum,INSTANCE(%InLineFieldOrders))
  414.       TC_InLine(ListControl,InLineFields[],FieldOrder%FieldOrdNum) #<!Call InLine Editing
  415.       #ENDFOR
  416.     END                                                    #<!End Execute
  417.     #ELSE
  418.     TC_InLine(ListControl,InLineFields[],FieldOrder)       #<!Call InLine Editing
  419.     #ENDIF
  420.                                                            #<!
  421.     CASE TC:INL:Action                                     #<!Process InLine Actions
  422.     OF TCACTION:SetFields                                  #<!Set Field Properties Action
  423.   #FOR(%QueueField)
  424.     #FOR(%InLineInstance),WHERE(UPPER(%InLineField)=UPPER(%QueueFieldAssignment))
  425.       !--------- ?%InLineField ---------
  426.       #CLEAR(%ValueConstruct)
  427.       #FOR(%Field),WHERE(UPPER(%Field) = UPPER(%InLineField) AND %FieldType = 'GROUP' )
  428.         #SET(%ValueConstruct,'GRP:')
  429.       #ENDFOR
  430.       ?%InLineField{PROP:Use} = %ValueConstruct%InLineField
  431.       #IF(%InlinePicture)
  432.       ?%InLineField{PROP:Text} = '%InLinePicture'
  433.       #ENDIF
  434.       #CASE(%InLinePropJustification)
  435.       #OF('Left Justified')
  436.       ?%InLineField{PROP:Left} = 1
  437.       #SET(%ValueConstruct,LEFT(FORMAT(%InLinePropOffset,@N3)))
  438.       ?%InLineField{PROP:LeftOffset} = %ValueConstruct
  439.       #OF('Right Justified')
  440.       ?%InLineField{PROP:Right} = 1
  441.       ?%InLineField{PROP:RightOffset} = %InLinePropOffset
  442.       #OF('Right Justified')
  443.       ?%InLineField{PROP:Center} = 1
  444.       ?%InLineField{PROP:CenterOffset} = %InLinePropOffset
  445.       #OF('Decimal')
  446.       ?%InLineField{PROP:Decimal} = 1
  447.       ?%InLineField{PROP:DecimalOffset} = %InLinePropOffset
  448.       #ELSE
  449.         #SET(%InLinePropJustification,'None')
  450.         #SET(%InLinePropOffset,0)
  451.       #ENDCASE
  452.       #IF(%InLinePropHlp)
  453.       ?%InLineField{PROP:Hlp} = '%InLinePropHlp'
  454.       #ENDIF
  455.       #IF(%InLinePropMsg)
  456.         #IF(SUB(LEFT(%InLinePropMsg),1,1) = '~')
  457.           #SET(%ValueConstruct,SUB(LEFT(%InLinePropMsg),2,LEN(%InLinePropMsg)))
  458.       ?%InLineField{PROP:Msg} = %ValueConstruct
  459.         #ELSE
  460.       ?%InLineField{PROP:Msg} = '%InLinePropMsg'
  461.         #ENDIF
  462.       #ENDIF
  463.       #IF(%InLineFieldType='Entry' OR %InLineFieldType='Spin Box')
  464.         #CASE(%InLinePropCase)
  465.         #OF('Capitalize')
  466.       ?%InLineField{PROP:Cap} = 1
  467.         #OF('Upper Case')
  468.       ?%InLineField{PROP:Upr} = 1
  469.         #ELSE
  470.           #SET(%InLinePropCase,'Norm')
  471.         #ENDCASE
  472.         #IF(%InLinePropReq)
  473.       ?%InLineField{PROP:Req} = 1
  474.         #ENDIF
  475.         #IF(%InLinePropImm)
  476.       ?%InLineField{PROP:Imm} = 1
  477.         #ENDIF
  478.         #IF(%InLinePropReadOnly)
  479.       ?%InLineField{PROP:ReadOnly} = 1
  480.         #ENDIF
  481.       #ENDIF
  482.       #IF(%InLineFieldType='Entry')
  483.         #IF(%InLinePropPassword)
  484.       ?%InLineField{PROP:Password} = 1
  485.         #ENDIF
  486.         #IF(%InLinePropSkip)
  487.       ?%InLineField{PROP:Skip} = 1
  488.         #ENDIF
  489.         #CASE(%InLinePropEntryMode)
  490.         #OF('Insert')
  491.       ?%InLineField{PROP:Ins} = 1
  492.         #OF('Overwrite')
  493.       ?%InLineField{PROP:Ovr} = 1
  494.         #ELSE
  495.           #SET(%InLinePropEntryMode,'As is')
  496.         #ENDCASE
  497.       #ENDIF
  498.       #IF(%InLineFieldType='Spin Box')
  499.         #IF(%InLinePropRangeHigh)
  500.       ?%InLineField{PROP:RangeHigh} = %InLinePropRangeHigh
  501.         #ENDIF
  502.         #IF(%InLinePropRangeLow)
  503.       ?%InLineField{PROP:RangeLow} = %InLinePropRangeLow
  504.         #ENDIF
  505.         #IF(%InLinePropStep)
  506.       ?%InLineField{PROP:Step} = %InLinePropStep
  507.         #ENDIF
  508.       #ENDIF
  509.       #IF(%InLineFieldType='Drop List' OR %InLineFieldType='Drop Combo' )
  510.         #SET(%ValueConstruct,LEFT(FORMAT(%InLinePropDrop,@N3)))
  511.       ?%InLineField{PROP:Drop} = %ValueConstruct
  512.         #IF(SUB(LEFT(%InLinePropFrom),1,1) <> ''''  AND INSTRING('|',%InLinePropFrom))
  513.       ?%InLineField{PROP:From} = '%InLinePropFrom'
  514.         #ELSE
  515.       ?%InLineField{PROP:From} = %InLinePropFrom
  516.         #ENDIF
  517.       ?%InLineField{PROP:Format} = '%InLinePropFormat'
  518.         #IF(%InLinePropVScroll)
  519.       ?%InLineField{PROP:VScroll} = 1
  520.         #ENDIF
  521.         #IF(%InLinePropHScroll)
  522.       ?%InLineField{PROP:HScroll} = 1
  523.         #ENDIF
  524.       #ENDIF
  525.  
  526.     #ENDFOR
  527.   #ENDFOR
  528.   #SUSPEND
  529.     #?OF TCACTION:SetHotKeys                               #<!Set Hot Keys Action
  530.     #IF(%InLineAbortKey)
  531.       TC:INL:AbortKey = %InLineAbortKey                    #<!  Set Cancel Key
  532.     #ENDIF
  533.     #IF(%InLineUseAbortButton)
  534.       TC:INL:AbortButton = AbortButton                     #<!  Set Cancel Button
  535.     #ENDIF
  536.     #IF(%InLineSaveKey)
  537.       TC:INL:SaveKey = %InLineSaveKey                      #<!  Set Save Key
  538.     #ENDIF
  539.     #IF(%InLineUseSaveButton)
  540.       TC:INL:SaveButton = SaveButton                       #<!  Set Save Button
  541.     #ENDIF
  542.     #IF(%InLineUseColumnEdit)
  543.       #IF(%InLineEditNextKey1)
  544.       TC:INL:EditNextKey1 = %InLineEditNextKey1            #<!  Set Next Rec Key for Column Edit
  545.       #ENDIF
  546.       #IF(%InLineEditNextKey2)
  547.       TC:INL:EditNextKey2 = %InLineEditNextKey2            #<!  Set Alt Next Rec Key for Column Edit
  548.       #ENDIF
  549.       #IF(%InLineEditPrevKey1)
  550.       TC:INL:EditPrevKey1 = %InLineEditPrevKey1            #<!  Set Previous Rec Key for Column Edit
  551.       #ENDIF
  552.       #IF(%InLineEditPrevKey2)
  553.       TC:INL:EditPrevKey2 = %InLineEditPrevKey2            #<!  Set Alt Previous Rec Key for Column Edit
  554.       #ENDIF
  555.     #ENDIF
  556.     #?
  557.   #RESUME
  558.   #SUSPEND
  559.     #?OF TCACTION:FieldEdits                               #<!Process Field Edits Action
  560.       #?CASE TC:INL:Field
  561.       #EMBED(%InLineFieldEdits,'In-Line Update Field Validations'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),WHERE(%ActiveTemplate = 'BrowseBox(ToolCraft)')
  562.       #?END
  563.     #?
  564.   #RESUME
  565.     #?OF TCACTION:UpdateRecord                             #<!Update Record Action
  566.     #IF(%MemoCount)
  567.       IF SAVE:%FilePrefix:RECORD = %FilePrefix:RECORD AND| #<!If the Record was Not Changed and
  568.       #CLEAR(%ValueConstruct)
  569.       #FOR(%Field),WHERE(%FieldType = 'MEMO')
  570.         #SET(%ValueConstruct,%ValueConstruct+1)
  571.         #IF(%ValueConstruct = %MemoCount)
  572.          SAVE:%Field = %Field                              #<!   the memo was not Changed
  573.         #ELSE
  574.          SAVE:%Field = %Field AND|                         #<!   the memo was not Changed and
  575.         #ENDIF
  576.       #ENDFOR
  577.     #ELSE
  578.       IF SAVE:%FilePrefix:RECORD = %FilePrefix:RECORD      #<!If the Record was Not Changed
  579.     #ENDIF
  580.         LocalResponse = RequestCompleted                   #<!  Set Local Response to Completed
  581.         CYCLE                                              #<!  Nothing to Save - Exit In-Line
  582.       END                                                  #<!End If
  583.       #EMBED(%BeforeInlineFileAction,'In-Line Update On Completion Before Writing To Disk'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),WHERE(%ActiveTemplate = 'BrowseBox(ToolCraft)')
  584.       LOOP                                                 #<!Attempt to Update Until Done or Canceled
  585.         Error%# = DUPLICATE(%File)                         #<!  Test For Duplicate Key
  586.         IF Error%#                                         #<!  If Duplicate Key Error
  587.           Button%# = MESSAGE('Updating this record creates a duplicate entry!', |
  588.                             'Duplicate Key Error',ICON:Exclamation,Button:OK,Button:OK,0)
  589.         ELSE                                               #<!  Otherwise
  590.   #IF(%AutoIncField)
  591.           SETCURSOR(Cursor:Wait)                           #<!    Show Hour-Glass Cursor
  592.           Error%# = RIUpdate:%File()                       #<!    Attempt Update
  593.   #ELSE
  594.           SETCURSOR(Cursor:Wait)                           #<!    Show Hour-Glass Cursor
  595.           IF UpdateAction = TCACTION:InsertRecord          #<!  If Inserting a New Record
  596.             ADD(%File)                                     #<!    Add the Record
  597.             Error%# = ERRORCODE()                          #<!    Set Error Flag
  598.           ELSE                                             #<!  Otherwise on Updating a Record
  599.             Error%# = RIUpdate:%File()                     #<!    Attempt Update
  600.           END                                              #<!  End If
  601.   #ENDIF
  602.         END                                                #<!  End If
  603.         IF Error%#                                         #<!  If Error Updating
  604.           SETCURSOR()                                      #<!    Reset to Normal Cursor
  605.           Button%# = StandardWarning(Warn:UpdateError)     #<!    Ask If User Wants to Try Saving Again
  606.           DISPLAY                                          #<!    Refresh Screen
  607.           CASE Button%#                                    #<!    Process User Response
  608.           OF Button:Yes                                    #<!    On YES Button
  609.              CYCLE                                         #<!      Retry Update Operation
  610.           OF Button:No                                     #<!    On NO Button
  611.             BREAK                                          #<!      Exit without Updating Record
  612.           OF Button:Cancel                                 #<!    On Cancel Button
  613.             TC:INL:AbortUpdate = True                      #<!      Tell Inline to Cancel Update Request
  614.             BREAK                                          #<!      Go back to editing record
  615.           END                                              #<!    End Case
  616.         END                                                #<!  End If
  617.         SETCURSOR()                                        #<!  Reset to Normal Cursor
  618.         LocalResponse = RequestCompleted                   #<!  Set Local Response to Completed
  619.         BREAK                                              #<!  Exit Update Loop
  620.       END                                                  #<!End Loop
  621.       #EMBED(%AfterInlineFileAction,'In-Line Update On Completion After Writing To Disk'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription)
  622.                                                            #<!
  623.     OF TCACTION:AbortUpdate                                #<!Abort Update Action
  624.       IF TC:INL:ResizeWindow THEN CYCLE.                   #<!Always abort changes on resize
  625.     #IF(%MemoCount)
  626.       IF SAVE:%FilePrefix:RECORD <> %FilePrefix:RECORD OR| #<!If the Record was Changed or
  627.       #CLEAR(%ValueConstruct)
  628.       #FOR(%Field),WHERE(%FieldType = 'MEMO')
  629.         #SET(%ValueConstruct,%ValueConstruct+1)
  630.         #IF(%ValueConstruct = %MemoCount)
  631.          SAVE:%Field <> %Field                             #<!   the memo was Changed
  632.         #ELSE
  633.          SAVE:%Field <> %Field OR|                         #<!   the memo was Changed or
  634.         #ENDIF
  635.       #ENDFOR
  636.     #ELSE
  637.       IF SAVE:%FilePrefix:RECORD <> %FilePrefix:RECORD     #<!If the Record was Changed
  638.     #ENDIF
  639.         Button%# = StandardWarning(Warn:SaveOnCancel)      #<!  Display Save on Cancel Message
  640.         DISPLAY                                            #<!  Refresh Screen
  641.         CASE Button%#                                      #<!  Process User Response
  642.         OF Button:Yes                                      #<!  On YES Button
  643.           TC:INL:AbortUpdate = False                       #<!    Cancel the Request to Abort
  644.           TC:INL:SelectField = ListControl                 #<!    Select List to Exit & Save Changes
  645.         OF Button:No                                       #<!  On NO Button
  646.           TC:INL:AbortUpdate = True                        #<!    Go Ahead and Abandon the Changes
  647.         OF BUTTON:Cancel                                   #<!  On Cancel Button
  648.           TC:INL:AbortUpdate = False                       #<!    Cancel the Request and Continue
  649.         END                                                #<!  End Case
  650.       END                                                  #<!End If
  651.       IF UpdateAction = TCACTION:InsertRecord              #<!If Adding a New Record
  652.         IF TC:INL:AbortUpdate = True                       #<!  If Record Add was Aborted
  653.           DELETE(%File)                                    #<!    Delete the New Record from the File
  654.         END                                                #<!  End If
  655.       END                                                  #<!End If
  656.                                                            #<!
  657.     OF TCACTION:ExitInLine                                 #<!Exit InLine Action
  658.       BREAK                                                #<!
  659.     END                                                    #<!End Case on Actions
  660.   END                                                      #<!End Loop
  661.                                                            #<!
  662. #SUSPEND
  663.   #?IF NOT TC:INL:UpdateAction                             #<!If Not Processing a Column Update Action
  664. #IF(%InLineUseAbortButton)
  665.   #CASE(%AbortButtonStatus)
  666.   #OF('HIDE')
  667.     HIDE(AbortButton)                                      #<!  Hide Cancel Button
  668.   #OF('DISABLE')
  669.     DISABLE(AbortButton)                                   #<!  Disable Cancel Button
  670.   #OF('BOTH')
  671.     HIDE(AbortButton)                                      #<!  Hide Cancel Button
  672.     DISABLE(AbortButton)                                   #<!  Disable Cancel Button
  673.   #ENDCASE
  674.   #IF(%InLineAbortButtonText)
  675.     AbortButton{PROP:Text} = %AbortButtonOrigText          #<!  Restore Normal Text for Cancel Button
  676.   #ENDIF
  677. #ENDIF
  678. #IF(%InLineUseSaveButton)
  679.   #CASE(%SaveButtonStatus)
  680.   #OF('HIDE')
  681.     HIDE(SaveButton)                                       #<!  Hide Cancel Button
  682.   #OF('DISABLE')
  683.     DISABLE(SaveButton)                                    #<!  Disable Cancel Button
  684.   #OF('BOTH')
  685.     HIDE(SaveButton)                                       #<!  Hide Cancel Button
  686.     DISABLE(SaveButton)                                    #<!  Disable Cancel Button
  687.   #ENDCASE
  688.   #IF(%InLineSaveButtonText)
  689.     SaveButton{PROP:Text} = %SaveButtonOrigText            #<!  Restore Normal Text for Save Button
  690.   #ENDIF
  691. #ENDIF
  692. #IF(INSTRING('NOBAR',%WindowStatement,1,1))
  693.     ListControl{PROP:NoBar} = 1                            #<!  Restore Hide Selection on Point Bar
  694. #ENDIF
  695.   #?END                                                    #<!End If
  696. #RESUME
  697.   GlobalResponse = LocalResponse                           #<!Set Global Response
  698.   RETURN                                                   #<!Exit In-Line Update Procedure
  699.  
  700.  
  701.  
  702.  
  703. #IF(%InLineInsertAllowed AND %AutoIncField)
  704. !--------------------------------------------------------------------------------------------------!
  705. ! Insert Record Routine                                                                            !
  706. !                                                                                                  !
  707. ! This routine Increments the Auto Number Key and Adds a New Record.                               !
  708. !--------------------------------------------------------------------------------------------------!
  709. InsertRecord         ROUTINE
  710.  
  711.   SAVE:%FilePrefix:RECORD = %FilePrefix:RECORD             #<!Save Current Record Area
  712.   #FOR(%Field),WHERE(%FieldType = 'MEMO')
  713.   SAVE:%Field = %Field                                     #<!Save the Memo Field
  714.   #ENDFOR
  715.   WRK:AutoAttempts = 0                                     #<!Clear Auto Increment Attempt Counter
  716.   LOOP                                                     #<!Loop and Attempt to Set Key
  717.     SET(%AutoIncKey)                                       #<!  Set to End of File
  718.     PREVIOUS(%File)                                        #<!  Read Last Record
  719.     IF ERROR()                                             #<!  If No Record to Read
  720.       SAVE:%AutoIncField = 1                               #<!    Start Auto Number Key at 1
  721.     ELSE                                                   #<!  Otherwise
  722.       SAVE:%AutoIncField = %AutoIncField + 1               #<!    Add 1 to Auto Number Key Value
  723.     END                                                    #<!  End If
  724.     %FilePrefix:RECORD = SAVE:%FilePrefix:RECORD           #<!  Restore Current Record Area
  725.     #FOR(%Field),WHERE(%FieldType = 'MEMO')
  726.     %Field = SAVE:%Field                                   #<!  Restore Memo Field
  727.     #ENDFOR
  728.     %AutoIncField = SAVE:%AutoIncField                     #<!  Set Auto Number Key Field
  729.                                                            #<!
  730.     ADD(%File)                                             #<!  Add New Record 
  731.     IF NOT ERROR() THEN BREAK.                             #<!  If Record Added then Auto Key is Set
  732.                                                            #<!
  733.     WRK:AutoAttempts += 1                                  #<!  Auto Increment Failed Add 1 to Attempts
  734.     IF WRK:AutoAttempts = 3                                #<!  If Failed to set 3 times
  735.       Button%# = StandardWarning(Warn:AutoIncError)        #<!    Ask If User Wants to Auto Inc Again
  736.       DISPLAY                                              #<!    Refresh Screen
  737.       IF Button%# = Button:Retry                           #<!    If User Requests to Retry Add
  738.         WRK:AutoAttempts = 0                               #<!      Reset Attempt Counter to Zero
  739.       ELSE                                                 #<!    Otherwise
  740.         CLEAR(%FilePrefix:RECORD)                          #<!      Clear the Record Area
  741.         #FOR(%Field),WHERE(%FieldType = 'MEMO')
  742.         CLEAR(%Field)                                      #<!      Clear the Memo Field
  743.         #ENDFOR
  744.         GlobalResponse = LocalResponse                     #<!      Set Global Response
  745.         RETURN                                             #<!      Exit In-Line Update
  746.       END                                                  #<!    End If
  747.     END                                                    #<!  End If
  748.   END                                                      #<!End Loop
  749.  
  750.  
  751.  
  752.  
  753. #ENDIF
  754. #IF(%InLineDeleteAllowed)
  755. !--------------------------------------------------------------------------------------------------!
  756. ! Delete Record Routine                                                                            !
  757. !                                                                                                  !
  758. ! This routine Deletes the Record.                                                                 !
  759. !--------------------------------------------------------------------------------------------------!
  760. DeleteRecord         ROUTINE
  761.  
  762.   LocalResponse = RequestCancelled                         #<!Default to Request to Delete Cancelled
  763.                                                            #<!
  764.   #EMBED(%OnInLineDeleteBeforeDelete,'In-Line Update On Delete Before Record Is Deleted'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),WHERE(%ActiveTemplate = 'BrowseBox(ToolCraft)')
  765.   #IF(%InLineActionOnDelete='Standard Warning')
  766. #IF(INSTRING('NOBAR',%WindowStatement,1,1))
  767.   ListControl{PROP:NoBar} = 0                              #<!Turn On Point Bar
  768. #ENDIF
  769.   Confirm%# = StandardWarning(Warn:StandardDelete)         #<!Get Confirmation from User
  770. #IF(INSTRING('NOBAR',%WindowStatement,1,1))
  771.   ListControl{PROP:NoBar} = 1                              #<!Restore Hide Selection for Point Bar
  772. #ENDIF
  773.   DISPLAY                                                  #<!Refresh Screen
  774.   IF Confirm%# <> Button:OK THEN EXIT.                     #<!If User Did Not Confirm Delete then Exit
  775.   #ENDIF
  776.                                                            #<!
  777.   LOOP                                                     #<!Attempt to Delete Until Done or Canceled
  778.     SETCURSOR(Cursor:Wait)                                 #<!  Show Hour-Glass Cursor
  779.     IF RIDelete:%File()                                    #<!  If Error Deleting
  780.       SETCURSOR()                                          #<!    Reset to Normal Cursor
  781.       CASE StandardWarning(Warn:DeleteError)               #<!    Ask If User Wants to Try Deleting Again
  782.       OF Button:Yes                                        #<!    On YES Button
  783.         CYCLE                                              #<!      Retry Delete Operation
  784.       OF Button:No                                         #<!    On NO Button
  785.       OROF Button:Cancel                                   #<!    Or On Cancel Button
  786.         BREAK                                              #<!      Exit without Deleting Record
  787.       END                                                  #<!    End Case
  788.     END                                                    #<!  End If
  789.     SETCURSOR()                                            #<!  Reset to Normal Cursor
  790.     LocalResponse = RequestCompleted                       #<!  Set Request Completed
  791.     BREAK                                                  #<!  Exit Delete Loop
  792.   END                                                      #<!End Loop
  793.  
  794.  
  795.  
  796.  
  797. #ENDIF
  798.